#ifndef __IDrawableFaceMANAGER_H__
#define __IDrawableFaceMANAGER_H__

#include "CTypes.h"
#include "IRenderizableLight.h"
#include "IDrawableFace.h"

typedef std::vector<IDrawableFace*>				EntityVector3DType;
typedef std::vector<IDrawableFace*>				EntityVector2DType;
typedef std::vector<IRenderizableLight*>		LightsToRenderType;

class IDrawableFaceManager
{
protected:
	EntityVector3DType					EntityVector3D;
	EntityVector2DType					EntityVector2D;
	LightsToRenderType					LightsToRender;

public:
	IDrawableFaceManager()				{}
	virtual ~IDrawableFaceManager()		{}

	inline void ClearRenderList()								{	EntityVector3D.clear();EntityVector2D.clear();LightsToRender.clear();	}
	inline u32 GetSize3DFaces()									{	return EntityVector3D.size();											}
	inline u32 GetSize2DFaces()									{	return EntityVector2D.size();											}
	inline u32 GetSizeLights()									{	return LightsToRender.size();											}
	inline IDrawableFace* GetEntity3D(u32 Index)				{	return EntityVector3D[Index];											}
	inline IDrawableFace* GetEntity2D(u32 Index)				{	return EntityVector2D[Index];											}
	inline IRenderizableLight *GetRenderizableLight(u32 Index)	{	return LightsToRender[Index];											}

	virtual void AddToLightRenderList(IRenderizableLight *NewLight)			= 0;
	virtual void AddToRenderList3D(IDrawableFace *NewEntity)				= 0;
	virtual void AddToRenderList2D(IDrawableFace *NewEntity)				= 0;
};

#endif
